From bf4a934859cdce00e3d13fbd07528c540b00c320 Mon Sep 17 00:00:00 2001 From: robertl Date: Fri, 11 Oct 2002 13:42:29 +0000 Subject: [PATCH] Add support for new undocumented Ozi fields (grrr) and support the concept of "unknown altitude" better. --- gpsbabel/defs.h | 6 ++++++ gpsbabel/ozi.c | 25 +++++++++++++++++++++++-- 2 files changed, 29 insertions(+), 2 deletions(-) diff --git a/gpsbabel/defs.h b/gpsbabel/defs.h index c7b248279..52f39cb94 100644 --- a/gpsbabel/defs.h +++ b/gpsbabel/defs.h @@ -142,3 +142,9 @@ void be_write16(void *pp, unsigned i); void be_write32(void *pp, unsigned i); void le_write16(void *pp, unsigned i); void le_write32(void *pp, unsigned i); + +/* + * A constant for unknown altitude. It's tempting to just use zero + * but that's not very nice for the folks near sea level. + */ +#define unknown_alt -99999999.0 diff --git a/gpsbabel/ozi.c b/gpsbabel/ozi.c index d04699bf7..91e804f8d 100644 --- a/gpsbabel/ozi.c +++ b/gpsbabel/ozi.c @@ -73,6 +73,7 @@ data_read(void) waypoint *wpt_tmp; int i; int linecount = 0; + double alt; do { linecount++; @@ -140,7 +141,12 @@ data_read(void) break; case 14: /* altitude in feet */ - wpt_tmp->position.altitude.altitude_meters = (atof(s) * .3048); + alt = atof(s); + if (alt == -777) { + wpt_tmp->position.altitude.altitude_meters = unknown_alt; + } else { + wpt_tmp->position.altitude.altitude_meters = alt * .3048; + } break; case 15: /* waypoint text name size */ @@ -151,6 +157,17 @@ data_read(void) case 17: /* symbol size - 17 default */ break; + /* + * Fields 18-23 were added around version 3.90.4g of + * Ozi, but aren't documented. We ignore them. + */ + case 18: + case 19: + case 20: + case 21: + case 22: + case 23: + break; default: /* whoa! nelly */ fprintf (stderr, "%s: Warning: data fields on line %d exceed specification.\n", @@ -181,7 +198,11 @@ ozi_waypt_pr(const waypoint * wpt) char * shortname; ozi_time = (wpt->creation_time / 86400.0) + 25569.0; - alt_feet = (wpt->position.altitude.altitude_meters * 3.2808); + if (wpt->position.altitude.altitude_meters == unknown_alt) { + alt_feet = -777; + } else { + alt_feet = (wpt->position.altitude.altitude_meters * 3.2808); + } if ((! wpt->shortname) || (global_opts.synthesize_shortnames)) { if (wpt->description) { -- 2.30.2